package com.bookstore.service.impl;

import com.bookstore.dto.OrderDTO;
import com.bookstore.dto.OrderItemDTO;
import com.bookstore.entity.Order;
import com.bookstore.entity.OrderItem;
import com.bookstore.repository.OrderRepository;
import com.bookstore.service.AdminOrderService;
import org.springframework.stereotype.Service;

import java.util.stream.Collectors;

@Service
public class AdminOrderServiceImpl extends BaseServiceImpl<Order, OrderDTO, Long, OrderRepository> implements AdminOrderService {
    
    public AdminOrderServiceImpl(OrderRepository repository) {
        super(repository);
    }
    
    @Override
    protected OrderDTO convertToDTO(Order order) {
        if (order == null) {
            return null;
        }
        
        OrderDTO dto = new OrderDTO();
        dto.setId(order.getId());
        dto.setOrderNumber(order.getOrderNumber());
        dto.setUserId(order.getUser().getId());
        // dto.setUsername(order.getUser().getUsername());
        dto.setTotalAmount(order.getTotalAmount());
        dto.setStatus(order.getStatus());
        // dto.setPaymentMethod(order.getPaymentMethod());
        dto.setAddress(order.getAddress());
        // dto.setContactPhone(order.getContactPhone());
        // dto.setContactName(order.getContactName());
        dto.setCreatedAt(order.getCreatedAt());
        // dto.setUpdatedAt(order.getUpdatedAt());
        
        // 转换订单项
        if (order.getItems() != null) {
            dto.setItems(order.getItems().stream()
                    .map(this::convertOrderItemToDTO)
                    .collect(Collectors.toList()));
        }
        
        return dto;
    }
    
    private OrderItemDTO convertOrderItemToDTO(OrderItem item) {
        OrderItemDTO itemDTO = new OrderItemDTO();
        itemDTO.setId(item.getId());
        // itemDTO.setOrderId(item.getOrder().getId());
        itemDTO.setBookId(item.getBook().getId());
        itemDTO.setBookTitle(item.getBook().getTitle());
        itemDTO.setQuantity(item.getQuantity());
        itemDTO.setPrice(item.getPrice());
        return itemDTO;
    }
    
    @Override
    protected Order convertToEntity(OrderDTO dto) {
        // 注意：创建新订单通常需要更复杂的逻辑，这里简化处理
        Order order = new Order();
        updateEntity(order, dto);
        return order;
    }
    
    @Override
    protected void updateEntity(Order order, OrderDTO dto) {
        // 管理端通常只更新订单状态等信息，不修改订单项
        if (dto.getStatus() != null) {
            order.setStatus(dto.getStatus());
        }
//         if (dto.getPaymentMethod() != null) {
//             order.setPaymentMethod(dto.getPaymentMethod());
//         }
        if (dto.getAddress() != null) {
            order.setAddress(dto.getAddress());
        }
         if (dto.getPhone() != null) {
             order.setPhone(dto.getPhone());
         }
        // if (dto.getContactName() != null) {
        //     order.setContactName(dto.getContactName());
        // }
    }
}